source :
https://stackoverflow.com/questions/3012287/how-to-read-mms-data-in-android
http://minhdanh2002.blogspot.de/2012/02/raw-access-to-sms-database-on-android.html
https://android.googlesource.com/platform/packages/providers/TelephonyProvider/+/jb-release/src/com/android/providers/telephony/MmsSmsDatabaseHelper.java
http://www.etsi.org/deliver/etsi_gts/03/0340/05.03.00_60/gsmts_0340v050300p.pdf
SMS type 0 (SMS ping, SMS furtifs): https://github.com/SecUpwN/Android-IMSI-Catcher-Detector/issues/69
https://github.com/domi007/silentSMS
http://forum.xda-developers.com/showthread.php?t=1422969
http://rednaxela.net/pdu.php
localisation GSM: http://blog.ptsecurity.com/2014/04/search-and-neutralize-how-to-determine.html
http://events.ccc.de/congress/2008/Fahrplan/attachments/1262_25c3-locating-mobile-phones.pdf
carte GSM: http://gsmmap.org/

The /data/data/com.android.providers.telephony/databases/mmssms.db 
file use sqlite format and is accessible into root mode ont the phone.



table addr
----------
_id: INTEGER (primary key)	ID
msg_id: INTEGER			The ID of MM which this Address entry belongs to
contact_id: INTEGER		The ID of contact entry in Phone Book
address: TEXT			The address text
type: INTEGER			Type of address,must be one of PduHeaders.BCC,
				PduHeaders.CC, PduHeaders.FROM, PduHeaders.TO
charset: INTEGER		Character set of entry

table android_metadata
----------------------
locale: TEXT

table SMS (info on SMS)
----------------------------
This table is used by the SMS dispatcher to hold incomplete partial messages
until all the parts arrive.

_id: INTEGER (primary key)	SMS ID
thread_id: INTEGER		The thread ID of the message
address: TEXT			The address of the other party
person: INTEGER
date: INTEGER			The date the message was received
date_sent: INTEGER		The date the message was sent
protocol: INTEGER		The protocol identifier code
read: INTEGER			Has the message been read? (boolean)
status: INTEGER			a TP-Status value or -1 if it status hasn't been 
				received (default)
				STATUS_COMPLETE=0 	TP-Status: complete.
				STATUS_FAILED=64 	TP-Status: failed.
				STATUS_NONE=-1 		TP-Status: no status received.
				STATUS_PENDING=32 	TP-Status: pending. 
				http://www.etsi.org/deliver/etsi_gts/03/0340/05.03.00_60/gsmts_0340v050300p.pdf
type: INTEGER			The type of message
				unsure sense ?
				1 if sent
				2 if receiverd
				3 if ?
reply_path_present: INTEGER
subject: TEXT			The subject of the message, if present
body: TEXT			The body of the message
service_center: TEXT		The service center (SC) through which to send the 
				message, if present
locked: INTEGER			Is the message locked?  (default 0)
error_code: INTEGER		Error code associated with sending or receiving this message
				(default 0)
seen: INTEGER			Indicates whether this message has been seen by
				the user. The "seen" flag will be used to figure
				out whether we need to throw up a statusbar 
				notification or not (default 0)

table sr_pending
----------------
This table is used by the SMS dispatcher to hold pending delivery status report
intents.

reference_number: INTEGER
action: TEXT
data: TEXT

table threads
-------------
This table maps the subject and an ordered set of recipient
IDs, separated by spaces, to a unique thread ID. The IDs
come from the canonical_addresses table. This works
because messages are considered to be part of the same
thread if they have the same subject (or a null subject)
and the same set of recipients.

_id: INTEGER PRIMARY KEY	identifier autoincremented
date: INTEGER			The date at which the thread was created
				(default 0)
message_count: INTEGER		The message count of the thread (default 0)
recipient_ids: TEXT		A string encoding of the recipient IDs of the
				recipients of the message, in numerical order and
				separated by spaces
				= canonical_addresses
snippet: TEXT			The snippet of the latest message in the thread
snippet_cs: INTEGER		The charset of the snippet (default 0)
read: INTEGER			Indicates whether all messages of the thread have
				been read (default 1)
type: INTEGER			Type of the thread, either Threads.COMMON_THREAD=0
				or Threads.BROADCAST_THREAD=1
error: INTEGER			Indicates whether there is a transmission error
				in the thread (default 0)
has_attachment: INTEGER		Indicates whether this thread contains any
				attachments (1), or 0 (default) if pure text

table words (FTS3)
------------------
_id				（2<<32）+source_id
index_text
source_id
table_to_use			1 or 2

table words_content
-------------------
docid: INTEGER PRIMARY KEY
c0_id				(2<<32）+ c2source_id
c1index_text
c2source_id
c3table_to_use			1 or 2

table words_segments
--------------------
blockid: INTEGER PRIMARY KEY
block: BLOB

table words_segdir
------------------
level: INTEGER PRIMARY KEY
idx: INTEGER
start_block: INTEGER
leaves_end_block: INTEGER
end_block: INTEGER
root: BLOB

table attachments
-----------------
sms_id: INTEGER			ID
content_url: TEXT		URL
offset: INTEGER			

table canonical_addresses
-------------------------
This table maps the first instance seen of any particular
MMS/SMS address to an ID, which is then used as its
canonical representation. If the same address or an
equivalent address (as determined by our Sqlite
PHONE_NUMBERS_EQUAL extension) is seen later, this same ID
will be used. The _id is created with AUTOINCREMENT so it
will never be reused again if a recipient is deleted.

_id: INTEGER PRIMARY KEY
address: TEXT			An address used in MMS or SMS. Email addresses
				are converted to lower case and are compared by
				string equality. Other addresses are compared
				using PHONE_NUMBERS_EQUAL

table drm
---------
_id: INTEGER PRIMARY KEY
_data: TEXT

table part
----------
_id: INTEGER PRIMARY KEY
mid: INTEGER		The identifier of the message which this part belongs to
			part._id = pdu._id
seq: INTEGER		The order of the part
ct: TEXT		type MIME (cf. https://fr.wikipedia.org/wiki/Type_MIME)
			text/plain, image/jpeg, image/bmp, image/gif,
			image/jpg, image/png
			if text/plain or application/smil, MMS is not pure text
			and there is some attachment (has_attachment=1
			in the thread from threads table)
name: TEXT		The name of the part
chset: INTEGER		The charset of the part
cd: TEXT		The content disposition of the part
fn: TEXT		The file name of the part
cid: TEXT		The content ID of the part
cl: TEXT		The content location of the part
ctt_s: INTEGER		The start of content-type of the message
ctt_t: TEXT		The type of content-type of the message
_data: TEXT		The location(on filesystem) of the binary data of the part
			(empty if text)
text: TEXT		content if text, empty else

table pdu (info on MMS)
----------------------------
http://www.xuebuyuan.com/1068475.html
https://developer.android.com/reference/android/provider/Telephony.BaseMmsColumns.html1
_id: INTEGER PRIMARY KEY
thread_id: INTEGER		thread id
date: INTEGER			The date the message was received (unix format)
date_sent: INTEGER		The date the message was sent (default 0)
msg_box: INTEGER		The box which the message belong to
				MESSAGE_BOX_ALL = 0
				MESSAGE_BOX_INBOX = 1
				MESSAGE_BOX_SENT   = 2
				MESSAGE_BOX_DRAFTS = 3
				MESSAGE_BOX_OUTBOX = 4
read: INTEGER			Has the message been read? (boolean)
m_id: TEXT			The Message-ID of the message
sub: TEXT			The subject of the message, if present
sub_cs: INTEGER			The character set of the subject, if present
ct_t: TEXT			The Content-Type of the message
ct_l: TEXT			The Content-Location of the message
exp: INTEGER			The expiry time of the message
m_cls: TEXT			The class of the message
m_type: INTEGER			The type of the message defined by MMS spec
				128 if sent
				130 if to send again
				132 if resent
v: INTEGER			The version of specification that this message
				conform
m_size: INTEGER			The size of the message
pri: INTEGER			The priority of the message
rr: INTEGER			The read-report of the message
rpt_a: INTEGER			Whether the report is allowed
resp_st: INTEGER		The response-status of the message
st: INTEGER			The status of the message
tr_id: TEXT			The transaction-id of the message
retr_st: INTEGER		The retrieve-status of the message
retr_txt: TEXT			The retrieve-text of the message
retr_txt_cs: INTEGER		The character set of the retrieve-text
read_status: INTEGER		The read-status of the message
ct_cls: INTEGER			The content-class of the message
resp_txt: TEXT			The response-text of the message
d_tm: INTEGER			The delivery-time of the message
d_rpt: INTEGER			The delivery-report of the message
locked: INTEGER			Has the message been locked?
seen: INTEGER			Indicates whether this message has been seen by
				the user. The "seen" flag will be used to figure
				out whether we need to throw up a statusbar
				notification or not (default 0)

table pending_msgs
------------------
This table stores the queue of messages to be sent/downloaded.

_id: INTEGER PRIMARY KEY	ID
proto_type: INTEGER		The type of transport protocol(MMS or SMS)
msg_id: INTEGER			The ID of the message to be sent or downloaded
msg_type: INTEGER		The type of the message to be sent or downloaded
err_type: INTEGER		The type of the error code
err_code: INTEGER		The error code of sending/retrieving process
retry_index: INTEGER		How many times we tried to send or download the
				message
due_time: INTEGER		The time to do next retry
last_try: INTEGER		The time we last tried to send or download the
				message

table rate
----------
sent_time: INTEGER		When a message was successfully sent

table raw
---------
_id: INTEGER PRIMARY KEY
date: INTEGER
reference_number: INTEGER	one per full message
count: INTEGER			the number of parts
sequence: INTEGER		the part number of this message
destination_port: INTEGER
address: TEXT
pdu: TEXT			the raw PDU for this part
	 


sqlite_autoindex_words_segdir_1
typeThreadIdIndex